package conservare.negocio;

import javax.persistence.NoResultException;

import conservare.dao.BancoDAO;
import conservare.modelo.banco.Agencia;
import conservare.modelo.banco.Banco;
import conservare.modelo.banco.CarteiraBoleto;
import conservare.modelo.banco.Conta;
import conservare.modelo.banco.SequencialBoleto;

public class BancoRN {

	private BancoDAO dao;
	
	public BancoRN(){
		this.dao = new BancoDAO();
	}
	
	public SequencialBoleto salvar(SequencialBoleto nossoNumeroBancario) {
		return this.dao.salvar(nossoNumeroBancario);
	}
	
	public CarteiraBoleto getCarteira(String numeroBanco, Integer numeroCarteira){
		String sql = "select a from Carteira a where a.numeroDaCarteira = ?1 and a.banco.numeroDoBanco = ?2 ";
		return dao.getPojo(CarteiraBoleto.class, sql, numeroCarteira, numeroBanco);
	}
	
	
	public Agencia obterAgenciaPeloNumero(Banco banco, String numeroDaAgencia){
		
		String sql = "SELECT a FROM Agencia a WHERE a.banco = ?1 AND a.numeroDaAgencia = ?2 ";
		
		try{
			return dao.getPojo(Agencia.class, sql, banco, numeroDaAgencia);
		}catch(NoResultException e){
			return null;
		}
		
	}
	
	public CarteiraBoleto getCarteira(Conta conta, Integer numCarteira, String modalidade){
		return dao.getCarteira(conta, numCarteira, modalidade);
	}
	
	
	
	public Conta obterContaPeloNumero(Banco banco, Agencia agencia, String numeroDaConta){
		
		String sql = "SELECT a FROM Conta a WHERE a.agencia.banco = ?2 AND a.agencia.numeroDaAgencia = ?2 AND a.numeroDaConta = ?2 ";
		
		try{
			return dao.getPojo(Conta.class, sql, banco, agencia, numeroDaConta);
		}catch(NoResultException e){
			return null;
		}
	}
	
	public Conta getConta(String cpfCnpj, String codigoBanco, String codigoAgencia, String codigoConta){
		return dao.getConta(cpfCnpj, codigoBanco, codigoAgencia, codigoConta);
	}
	
	
/*	public Integer gerarSequencialNossoNumeroBancario(Carteira carteira){
		return new BancoDAO().gerarSequencialNossoNumeroBancario(carteira);	
	}*/
//	public GegenciadorSequencialNossoNumeroBancario getNossoNumeroBancario(Carteira carteira){
//		return dao.getNossoNumeroBancario(carteira);
//	}
//	
//	public GegenciadorSequencialNossoNumeroBancario getGegenciadorSequencialNossoNumeroBancario(String numeroBanco, Integer codigoCarteira){
//		return this.dao.getGegenciadorSequencialNossoNumeroBancario(numeroBanco, codigoCarteira);
//	}
}
